package mid

/*
* @author: hjz
* @time: 2025/6/10 22:08
 */
func spiralOrder(matrix [][]int) []int {
	l, r, t, d := 0, len(matrix[0])-1, 0, len(matrix)-1
	res := make([]int, 0, len(matrix)*len(matrix[0]))
	for {
		// 从左到右
		for i := l; i <= r; i++ {
			res = append(res, matrix[t][i])
		}
		t++
		if t > d {
			break
		}
		// 从上到下
		for i := t; i <= d; i++ {
			res = append(res, matrix[i][r])
		}
		r--
		if l > r {
			break
		}
		// 从右到左
		for i := r; i >= l; i-- {
			res = append(res, matrix[d][i])
		}
		d--
		if t > d {
			break
		}
		// 从下到上
		for i := d; i >= t; i-- {
			res = append(res, matrix[i][l])
		}
		l++
		if l > r {
			break
		}
	}
	return res
}
